home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Merciful 2
/
Merciful - Disc 2.iso
/
software
/
i
/
ian'simagineutilsv1.3.lha
/
IIUtilities
/
ShowStage
< prev
next >
Wrap
Text File
|
1995-01-19
|
4KB
|
137 lines
/*\
* This ARexx script will parse an Imagine staging file and list every
* object and brush that is accessed in it. It then displays the total
* number of points, objects and faces as well as total pixels in the
* bitmaps loaded for the included objects.
*
* Usage: ShowStage [Frame]
*
* Frame is the frame number you want stats on. If you leave it
* off it will read every object in your scene.
*
* NOTE: You need to change the first line to point to the directory
* that Imagine is in. This is needed so this script knows
* where to look for objects and brushes when not saved as
* absolute directory names.
*
* V1.3 (Jan-19-95)
* IanSmith@moose.erie.net
\*/
Path="Imagine:" /* Path for Imagine, change if needed! */
Parse Arg FileName FrameNum
If FrameNum="" Then
FrameNum=-1
LineBuffer=""
Count.Faces=0
Count.TotalFaces=0
Count.Edges=0
Count.Points=0
Count.Pixels=0
Call Open(In,FileName,"R") ParseStaging(C2D(SubStr(ReadCH(In,12),5,4)))
Say "Totals: Points="Count.Points "Edges="Count.Edges "Faces="Count.TotalFaces
Say " Pixels="Count.Pixels "("Count.Pixels*3/1024%1"k)"
Exit
ParseStaging: PROCEDURE EXPOSE Path Count. LineBuffer FrameNum
Parse Arg MaxSize
TotalSize=4
Do Until TotalSize>=MaxSize
LineBuffer=""
Count.Faces=0
Name=ReadCH(In,4)
Size=C2D(ReadCH(In,4))
If Size//2=1 Then Size=Size+1 /* Add pad byte if needed */
If Name="ISTG" | Name="SOBJ" Then Do
TotalSize=TotalSize+ParseStaging(Size)+8 /* Parse into these hunks */
Iterate
End
TotalSize=TotalSize+Size+8
If Name="FIL3" Then Do
Data=ReadCH(In, 41)
StartF=C2D(SubStr(Data,3,2))
EndF=C2D(SubStr(Data,5,2))
ObjectPath=ReadCH(In,Size-41)
If (StartF<=FrameNum & EndF>=FrameNum) | FrameNum=-1 Then Do
OldObjectPath=ObjectPath
If Index(ObjectPath,":")=0 Then
ObjectPath=Path||ObjectPath
FaceCount="Missing"
If Open(ObjIn,ObjectPath,"R")=1 Then Do
ParseObject(C2D(SubStr(ReadCH(ObjIn,12),5,4)))
FaceCount=Count.Faces "faces"
Call Close(ObjIn)
End
Say Strip(OldObjectPath||" ("FaceCount")"||'0A'x||LineBuffer,"B",'0A'x) StartF"-"EndF
Count.TotalFaces=Count.TotalFaces+Count.Faces
End
End; Else
Call Seek(In,Size,"C")
End
Return TotalSize
ParseObject: PROCEDURE EXPOSE Path Count. LineBuffer
Parse Arg MaxSize Parent
TotalSize=4
Do Until TotalSize>=MaxSize
Name=ReadCH(ObjIn,4)
Size=C2D(ReadCH(ObjIn,4))
If Size//2=1 Then Size=Size+1 /* Add pad byte if needed */
If Name="OBJ " | Name="DESC" | Name="TOBJ" Then Do
TotalSize=TotalSize+ParseObject(Size)+8 /* Parse into these hunks */
Iterate
End
TotalSize=TotalSize+Size+8
If Name="FACE" Then Do /* Add Faces, Edges, */
Count.Faces=Count.Faces+C2D(ReadCH(ObjIn,2)) /* and Points. */
Call Seek(ObjIn,Size-2,"C")
End; Else If Name="PNTS" Then Do
Count.Points=Count.Points+C2D(ReadCH(ObjIn,2))
Call Seek(ObjIn,Size-2,"C")
End; Else If Name="EDGE" Then Do
Count.Edges=Count.Edges+C2D(ReadCH(ObjIn,2))
Call Seek(ObjIn,Size-2,"C")
End; Else If Name="BRS4" Then Do /* Brushmap */
Call Seek(ObjIn,105,"C")
WrapPath=ReadCH(ObjIn,Size-105) /* Grab Filename */
OldWrapPath=WrapPath
If Index(WrapPath,":")=0 Then
WrapPath=Path||WrapPath
LineBuffer=LineBuffer||" Brush: "||ParseILBM()||'0A'x
End; Else
Call Seek(ObjIn,Size,"C")
End
Return TotalSize
ParseILBM:
Call Close(ILBMIn)
If Open(ILBMIn, WrapPath, "R")=0 Then
Return OldWrapPath||" does not exist."
CSize=8
Buf=ReadCH(ILBMIn,12)
If Left(Buf,4)~="FORM" Then
Return OldWrapPath||" is not an IFF file."
Size=C2D(SubStr(Buf,5,4))
If Right(Buf,4)~="ILBM" Then
Return OldWrapPath||" is not an IFF ILBM file."
Do Until Size<=CSize
Buffer=ReadCH(ILBMIn,8)
HunkName=Left(Buffer,4)
HunkSize=C2D(Right(Buffer,4))
HunkSize=HunkSize
CSize=CSize+HunkSize+8+BitTst(HunkSize,0)
HunkData=ReadCH(ILBMIn,HunkSize+BitTst(HunkSize,0))
If HunkName="BMHD" Then Do
Width=C2D(Left(HunkData,2))
Height=C2D(SubStr(HunkData,3,2))
Planes=C2D(SubStr(HunkData,9,1))
End
End
Count.Pixels=Count.Pixels+Width*Height
Return OldWrapPath||" ("||Width*Height||" pixels)"